\documentclass[10.5pt, a4paper]{article}

\usepackage{xeCJK}
\newCJKfontfamily{\heiti}[AutoFakeBold={3.17}]{SimHei}

\usepackage{geometry}
\geometry{
    left = 0.6in,
    right = 0.6in,
    top = 0.8in,
    bottom = 1.0in
}
\usepackage{amssymb,amsbsy,amsmath,xcolor,mathrsfs,graphicx}
\usepackage{listings}
\usepackage{tasks}
\settasks{
    label = \Alph*. ,
    label-width = 16pt
}

\renewcommand{\title}[3]{
    \begin{center}
        \Large\heiti #1~年~#2~月 Python~#3级考试
    \end{center}
}
\newcommand{\TimeAndName}[1]{
    \begin{center}
        考试时间:~#1~ 分钟 \qquad\qquad\qquad\qquad 姓名:\underline{\quad\quad\quad\quad}
    \end{center}
}

\begin{document}
    \lstset{
        language = python,
        keywordstyle = \color{orange}\bfseries,
        emph = {print,bool,chr,ord,sorted,float,type,oct,hex,abs,sum,len,int,open,list,map,str,range,min,max,input},
        emphstyle = \color{purple}\bfseries,
        showspaces = false,
        basicstyle = \ttfamily,
        morekeywords = {True,False}
    }

    \title{2021}{9}{二}
    
    \TimeAndName{60}
    
    \vspace{1cm}
    {\noindent\heiti 第一部分、单选题(共 25 题,每题 2 分,共50分.)}

    \begin{enumerate}
        % 1
        \item 有如下Python程序段，程序段执行后，输出的结果为？(\qquad)
        \begin{lstlisting}
            x, y = 12, 5
            if x%y == 0:
                z = x/y
                print(x, "/", y, "=", z)
            else:
                z = y*x
                print(x, "*", y, "=", z)
        \end{lstlisting}
        \begin{tasks}(4)
            \task \lstinline!x/y=2.4!
            \task \lstinline!x*y=60!
            \task \lstinline!12/5=2.4!
            \task \lstinline!12*5=60!
        \end{tasks}
    
        % 2
        \item 下列创建元组的方法中不正确的是?(\qquad)
        \begin{tasks}(2)
            \task \lstinline!t=(1,2,'信息')!
            \task \lstinline!t=(1)!
            \task \lstinline!t=('信息',)!
            \task \lstinline!t='音乐','体育','美术'!
        \end{tasks}

        % 3
        \item 程序运行结果为？(\qquad)
        \begin{lstlisting}
            s = '语文、数学、英语、信息技术'
            l = s.split('、')
            print(l)
        \end{lstlisting}
        \begin{tasks}(2)
            \task \lstinline!['语文', '数学', '英语', '信息技术']!
            \task \lstinline!['语文、数学、英语、信息技术']!
            \task \lstinline!('语文', '数学', '英语', '信息技术')!
            \task \lstinline!('语文、数学、英语、信息技术')!
        \end{tasks}

        % 4
        \item 已知存在字典a中有多个键值对，以下指令可以清空字典并保留变量的是？(\qquad)
        \begin{tasks}(4)
            \task \lstinline!a.remove()!
            \task \lstinline!a.pop()!
            \task \lstinline!a.clear()!
            \task \lstinline!del a!
        \end{tasks}

        % 5
        \item 以下程序的运行结果是?(\qquad)
        \begin{lstlisting}
            list1 = [1,2,3]
            list1[2] = 4
            print(list)
        \end{lstlisting}
        \begin{tasks}(4)
            \task \lstinline![1,2,4]!
            \task \lstinline![1,2,3]!
            \task \lstinline![1,4,3]!
            \task \lstinline![1,4]!
        \end{tasks}

        % 6
        \item 执行下列代码后，运行结果是？(\qquad)
        \begin{lstlisting}
            l1 = [11, 22, 33]
            l2 = [66, 44, 22]
            for i in l1:
                for j in l2:
                    if i==j:
                        print(i)
        \end{lstlisting}
        \begin{tasks}(4)
            \task True
            \task 0
            \task 2
            \task 22
        \end{tasks}

        % 7
        \item 执行以下语句后的输出结果是？(\qquad)
        \begin{lstlisting}
            >>> str1 = 'My name is BeiJing'
            >>> print(len(str1))
        \end{lstlisting}
        \begin{tasks}(4)
            \task 20
            \task 18
            \task 15
            \task 16    
        \end{tasks}

        \newpage
        % 8
        \item 列表\lstinline!a=[1,2,3,4,5,6,7,8,9]!，对列表进行切片操作，要想得到\lstinline![3,5,7]!，以下切片正确的是?(\qquad)
        \begin{tasks}(4)
            \task \lstinline!a[-7:-2:-2]!
            \task \lstinline!a[2:7:2]!
            \task \lstinline!a[3:7:2]!
            \task \lstinline!a[2:7:-2]!
        \end{tasks}

        % 9
        \item 执行以下语句，将输出?(\qquad)
        \begin{lstlisting}
            >>> list1 = ['b','c',1,2,3,4,5]
            >>> list1.append('a')
            >>> list1.append('a')
            >>> list1
        \end{lstlisting}
        \begin{tasks}(2)
            \task \lstinline!['b','c',1,2,3,4,5]!
            \task \lstinline!['b','c',1,2,3,4,5,'a']!
            \task \lstinline!['b','c',1,2,3,4,5,'a','a']!
            \task 无输出
        \end{tasks}

        % 10
        \item  不能用作\lstinline!if!语句条件表达式的是?(\qquad)
        \begin{tasks}(4)
            \task x in range(6)
            \task 3 = a
            \task a>3 and b<10
            \task x-6>5
        \end{tasks}

        % 11
        \item 执行以下语句后，输出的结果是？(\qquad)
        \begin{lstlisting}
            >>> list2 = ['a',1,2,3,4,5]
            >>> print(list2[5])
        \end{lstlisting}
        \begin{tasks}(4)
            \task 5
            \task 4
            \task 3
            \task 提示错误
        \end{tasks}

        % 12
        \item \lstinline!alist = ['cat', 'bat', 'cat', 'hat', 'cat']!，执行下列代码，输出的结果是？(\qquad)
        \begin{lstlisting}
            alist.remove('cat')
            print(alist)
        \end{lstlisting}
        \begin{tasks}(2)
            \task \lstinline!['cat','bat','cat','hat','cat']!
            \task \lstinline!['bat','cat','hat','cat']!
            \task \lstinline!['bat','hat']!
            \task \lstinline!['cat','bat','cat','hat']!
        \end{tasks}

        % 13
        \item 以下创建字典的方法，正确的是?(\qquad)
        \begin{tasks}(2)
            \task \lstinline!d=\{学号,001,姓名,张三,成绩,98\}!
            \task \lstinline!d=\{'学号':'001','姓名':'张三','成绩':98\}!
            \task \lstinline!d=\{'学号','001','姓名','张三','成绩',98\}!
            \task \lstinline!d=\{'学号':'001';'姓名':'张三';'成绩':98\}!
        \end{tasks}

        % 14
        \item 以下代码输出的结果是?(\qquad)
        \begin{lstlisting}
            for i in "Python":
                if i=='t' or i=='o':
                    continue
                print(i, end='')
        \end{lstlisting}
        \begin{tasks}(4)
            \task Pyhn
            \task Python
            \task Pyt
            \task Pytho
        \end{tasks}
        
        % \newpage
        % 15
        \item 对于字典\lstinline!dic={1:2,'3':'d','sex':1,4:{'No':1,'name':'Mike'}}!，\lstinline!len(dic)!的值是?(\qquad)
        \begin{tasks}(4)
            \task 3
            \task 4
            \task 5
            \task 6
        \end{tasks}

        % 16
        \item 对于元组\lstinline!tup=(1,2,3,4)!执行的操作非法的是?(\qquad)
        \begin{tasks}(4)
            \task len(tup)
            \task max(tup)
            \task min(tup)
            \task \lstinline!tup[1]=6!
        \end{tasks}

        % 17
        \item 水果店促销每斤苹果5元，如果购买六斤及六斤以上还可以打八折，小红去买苹果，下面的哪一个的Python程序可以帮小红算一下她买苹果得花多少钱（具体购买斤数由小红输入）?(\qquad)
        \begin{tasks}(4)
            \task \includegraphics[width=.18\textwidth]{17a.png}
            \task \includegraphics[width=.18\textwidth]{17b.png}
            \task \includegraphics[width=.18\textwidth]{17c.png}
            \task \includegraphics[width=.18\textwidth]{17d.png}
        \end{tasks}

        \newpage
        % 18
        \item  执行下列代码后，运行结果是?(\qquad)
        \begin{lstlisting}
            s = "垃圾分类"
            i = len(s)
            while i>=0:
                print(s[i-1])
                i = i-1
        \end{lstlisting}
        \begin{tasks}(4)
            \task 类\\分\\圾\\垃
            \task 垃\\圾\\分\\类
            \task 垃\\圾\\分\\类\\垃
            \task 类\\分\\圾\\垃\\类
        \end{tasks}

        % 19
        \item 在列表a中存放1-100之间所有的奇数，可以有多种方法，以下哪种方法是错误的?(\qquad)
        \begin{tasks}(2)
            \task \lstinline!a=list(range(1,100,2))!
            \task \lstinline!a=range(1,101,2)!
            \task \includegraphics[width=.13\textwidth]{19c.png}
            \task \includegraphics[width=.19\textwidth]{19d.png}
        \end{tasks}

        % 20
        \item 若\lstinline!li=list(range(1,10,2))!，则\lstinline!print(i)!的结果是?(\qquad)
        \begin{tasks}(2)
            \task \lstinline![0,2,4,6,8,10]!
            \task \lstinline![1,3,5,7,9]!
            \task \lstinline![1,2,3,4,5,6,7,8,9,10]!
            \task \lstinline![0,2,4,6,8]!
        \end{tasks}

        % 21
        \item 已知\lstinline!a=['a','b'],b=[7,8,9]!，如果\lstinline!c=a*2+b!，那么列表c是？(\qquad)
        \begin{tasks}(2)
            \task \lstinline!['a','b','a','b',7,8,9]!
            \task \lstinline!['a','b',2,7,8,9]!
            \task \lstinline!['a','b',7,8,9,'a','b']!
            \task \lstinline!['a','b','a','b',7,8,9,7,8,9]!
        \end{tasks}

        % 22
        \item 已知\lstinline!a=[1,2,3,4,5,6,7]!，则\lstinline!a[0:-2]!的值是?(\qquad)
        \begin{tasks}(2)
            \task \lstinline![1,2,3,4,5,6]!
            \task \lstinline![2,3,4,5,6]!
            \task \lstinline![1,2,3,4,5]!
            \task \lstinline![2,3,4,5]!
        \end{tasks}

        % 23
        \item 以下语句不正确的是?(\qquad)
        \begin{tasks}(2)
            \task \lstinline!dict=\{1:'a'\}!
            \task \lstinline!a=\{'name':'bob'\}!
            \task \lstinline!e=\{[1]:'篮球'\}!
            \task \lstinline!c=\{'school':'精英小学'\}!
        \end{tasks}

        % \newpage
        % 24
        \item 关于\lstinline!break!的作用，以下说法正确的是？(\qquad)
        \begin{tasks}
            \task 按照缩进跳出当前层语句块
            \task 暂停该语句后面的循环内容，跳转到循环开始位置开始下一轮循环
            \task 跳出当前层\lstinline!for/while!循环
            \task 跳出所有\lstinline!for/while!循环
        \end{tasks}

        % 25
        \item 若\lstinline!s=(1,'a',[1,2])!，则\lstinline!len(s)!的值为？(\qquad)
        \begin{tasks}(4)
            \task 错误
            \task 2
            \task 3
            \task 4
        \end{tasks}
    \end{enumerate}

    \vspace{1cm}
    {\noindent\heiti 第二部分、判断题(共 10 题,每题 2 分,共20分.)}
    \begin{enumerate}
        \setcounter{enumi}{25}
        % 26
        \item \lstinline!while!循环和\lstinline!for-in!循环一样，都明确了循环的次数.(\qquad)

        %27
        \item 可以使用"+"和"-"来连接与删除字符串.(\qquad)
        
        %28
        \item 不同类型的元素可以存储在同一个列表中.(\qquad)
  
        %29
        \item 循环结构中的\lstinline!continue!语句的功能是中断当前循环的执行，进入下一轮循环条件是否满足的判断.(\qquad)
        
        %30
        \item ESC可以用于Python跳出循环.(\qquad)
        
        %31
        \item 按照顺序执行下面的代码，以下命令都是合法的.(\qquad)
        \begin{lstlisting}
            list1 = [1,2,3]
            list1[2] = 4
            tuple1 = (1,2,3)
            tuple1[0] = 0
        \end{lstlisting}
        
        %32
        \item Python列表、元组、字典都属于有序序列，都可以用索引进行访问.(\qquad)
        
        %33
        \item \lstinline!message1 = 'Hello'!，则\lstinline!message1.append('world')!的值为\lstinline!'Hello world'!.(\qquad)
        
        %34
        \item 元组一旦创建，其中的元素就不能再被修改了.(\qquad)
        
        %35
        \item 运行以下程序，结果是一条由9行单个的\#组成的图案.(\qquad)
        \begin{lstlisting}
            i = 0
            while i<10:
                i = i+1
                print('#')
        \end{lstlisting}
    \end{enumerate}

    % \newpage
    {\noindent\heiti 第三部分、编程题(共 2 题,共30分.)}
    \begin{enumerate}
        \setcounter{enumi}{35}
        
        % 36
        \item 日期转换,要求如下：
        
        \begin{tasks}[label=\arabic*.]
            \task 实现用户输入一个日期，格式为"月/日/年",例如输入："05/21/2021"，输出："May,21,2021"；
            \task 1-12月的英文名称如下：

            January, February, March, April, May, June, July, August, September, October, November, December.
        \end{tasks}
        \vfill

        %37
        \item 图形的循环美,要求如下:
        
        \begin{tasks}[label=\arabic*.]
            \task 海龟从里往外绘制图形；
            \task 线条初始长度为20；
            \task 相邻两条边相差4（每一个线条均比前一个线条长4）
            \task 线条颜色为红色，总共边数至少80条以上（为了便于调试，建议不超过120条）
        \end{tasks}
        \vfill
    \end{enumerate}

    \newpage
    \begin{center}
        \Huge \heiti 参考答案
    \end{center}

        \begin{tasks}[label=\arabic*.](5)
            \task D
            \task B
            \task A
            \task C
            \task A

            \task D
            \task B
            \task B
            \task C
            \task B

            \task A
            \task B
            \task B
            \task A
            \task B

            \task D
            \task B
            \task D
            \task B
            \task B

            \task A
            \task C
            \task C
            \task C
            \task C

            \task $\times$
            \task $\times$
            \task $\checkmark$
            \task $\checkmark$
            \task $\times$

            \task $\times$
            \task $\times$
            \task $\times$
            \task $\checkmark$
            \task $\times$
        \end{tasks}

        \begin{enumerate}
            \setcounter{enumi}{35}
            \item \begin{lstlisting}
                months = [' ',
                    'January', 'February', 'March', 'April',
                    'May', 'June', 'July', 'August',
                    'September', 'October', 'November', 'December'
                ]

                date = input("请输入日期:").split("/")
                print(months[int(date[0])],date[1],date[2],sep=",")
            \end{lstlisting}

            \item \begin{lstlisting}
                import turtle

                length = 20

                turtle.pencolor("red")
                for i in range(100):
                    turtle.fd(length)
                    turtle.left(90)
                    length += 4
            \end{lstlisting}
        \end{enumerate}
\end{document}